import 'package:flutter/widgets.dart';

class GoogleAppleStorePurchasePageTranslation {
  static final delegate = _GoogleAppleStorePurchasePageTranslationDelegate();

  static GoogleAppleStorePurchasePageTranslation of(BuildContext context) {
    return Localizations.of(context, GoogleAppleStorePurchasePageTranslation);
  }

  late String _languageCode;

  Future<void> load(Locale locale) async {
    _languageCode = locale.languageCode;
  }

  String _resolve(Map<String, String> translations) {
    return translations[_languageCode]!;
  }

  String get title {
    return _resolve(const {
      'ru': 'Начни сегодня!',
      'en': 'Get started today!',
    });
  }

  String get subtitle {
    return _resolve(const {
      'ru': 'Учи слова эффективнее вместе с Angry\u00a0Words\u00a0Pro.',
      'en': 'Learn words more effectively with Angry\u00a0Words\u00a0Pro.',
    });
  }

  String getPurchaseItemTileSubscriptionDurationLabel({
    required int months,
  }) {
    if (_languageCode == 'ru') {
      final lastDigit = months.remainder(10);
      final lastTwoDigits = months.remainder(100);

      if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
        return 'месяцев';
      }

      if (lastDigit == 1) {
        return 'месяц';
      }

      if (const {2, 3, 4}.contains(lastDigit)) {
        return 'месяца';
      }

      return 'месяцев';
    } else if (_languageCode == 'en') {
      final lastDigit = months.remainder(10);

      if (lastDigit == 1) {
        return 'month';
      }

      return 'months';
    }

    throw Exception();
  }

  String get purchaseItemTileLifetimePurchaseDurationLabel {
    return _resolve(const {
      'ru': 'Навсегда',
      'en': 'Lifetime',
    });
  }

  String get purchaseItemTileYearSubscriptionBadge {
    return _resolve(const {
      'ru': 'ПОПУЛЯРНО',
      'en': 'POPULAR',
    });
  }

  String buildMonthlyPriceLabel({
    required String monthlyPriceWithCurrency,
  }) {
    return _resolve({
      'ru': '$monthlyPriceWithCurrency / месяц',
      'en': '$monthlyPriceWithCurrency / month',
    });
  }

  String get subscriptionTilePriceLabel {
    return _resolve(const {
      'ru': '3 дня бесплатно',
      'en': '3 days free',
    });
  }

  String get purchaseRequestButtonTitle {
    return _resolve(const {
      'ru': 'Начать сейчас',
      'en': 'Start now',
    });
  }

  String get dailyUnlimitPremiumFeatureTitle {
    return _resolve(const {
      'ru': 'Без дневного ограничения',
      'en': 'No daily limit',
    });
  }

  String get dailyUnlimitPremiumFeatureSubtitle {
    return _resolve(const {
      'ru': 'Учи сколько хочешь слов в любое время.',
      'en': 'Learn as many words as you want at any time.',
    });
  }

  String get exerciseShufflingPremiumFeatureTitle {
    return _resolve(const {
      'ru': 'Перемешивание упражнений',
      'en': 'Shuffle of exercises',
    });
  }

  String get exerciseShufflingPremiumFeatureSubtitle {
    return _resolve(const {
      'ru': 'Сделай тренировку слов более увлекательной.',
      'en': 'Make word training more entertaining.',
    });
  }

  String get allLearningContentPremiumFeatureTitle {
    return _resolve(const {
      'ru': 'Любые слова и коллекции',
      'en': 'Any words and collections',
    });
  }

  String get allLearningContentPremiumFeatureSubtitle {
    return _resolve(const {
      'ru': 'Выбирай любые коллекции или добавляй свои слова.',
      'en': 'Select any collections or add your own words.',
    });
  }

  String get imagePremiumFeatureTitle {
    return _resolve(const {
      'ru': 'Картинки к словам',
      'en': 'Images to the words',
    });
  }

  String get imagePremiumFeatureSubtitle {
    return _resolve(const {
      'ru': 'Запоминай слова лучше благодаря визуальным ассоциациям.',
      'en': 'Memorize words better with visual associations.',
    });
  }

  String get themeCustomizationPremiumFeatureTitle {
    return _resolve(const {
      'ru': 'Кастомизация темы',
      'en': 'Theme castomization',
    });
  }

  String get themeCustomizationPremiumFeatureSubtitle {
    return _resolve(const {
      'ru': 'Настрой тему под себя.',
      'en': 'Customize the theme for yourself.',
    });
  }
}

class _GoogleAppleStorePurchasePageTranslationDelegate
    extends LocalizationsDelegate<GoogleAppleStorePurchasePageTranslation> {
  @override
  bool isSupported(Locale locale) => const ['ru', 'en'].contains(locale.languageCode);

  @override
  bool shouldReload(LocalizationsDelegate<GoogleAppleStorePurchasePageTranslation> old) => false;

  @override
  Future<GoogleAppleStorePurchasePageTranslation> load(Locale locale) async {
    final translation = GoogleAppleStorePurchasePageTranslation();
    await translation.load(locale);
    return translation;
  }
}
